package Figuras;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Stroke;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;

public class Cuadrado extends FiguraConRelleno {

    private int anchoDelCuadrado;

    // Funciones Básicas para creación y uso de la Figura:
    public Cuadrado(Point2D puntoDeInicio, int anchoDelCuadrado,
            Color colorDelBorde, Color colorDelRelleno, int grosorDelBorde) {
        super(puntoDeInicio, colorDelBorde, colorDelRelleno, grosorDelBorde);
        fijarElAnchoDelCuadrado(anchoDelCuadrado);
    }

    public Cuadrado(int coordenadaX, int coordenadaY, int anchoDelCuadrado,
            Color colorDelBorde, Color colorDelRelleno, int grosorDelBorde) {
        super(coordenadaX, coordenadaY, colorDelBorde, colorDelRelleno, grosorDelBorde);
        fijarElAnchoDelCuadrado(anchoDelCuadrado);
    }

    @Override
    public void dibujarLaFigura(Graphics dibujarCuadrado) {
        Graphics2D dibujarCuadrado2D;
        Rectangle2D cuadrado;
        Stroke bordeDelCuadrado;
        if (dameElColorDelQueEstaRellenada() != null) {
            dibujarCuadrado.setColor(dameElColorDelQueEstaRellenada());
            dibujarCuadrado.fillRect((int) dameElInicioDeLaFigura().getX(),
                    (int) dameElInicioDeLaFigura().getY(),
                    dameElAnchoDelCuadrado(),
                    dameElAnchoDelCuadrado());
        }
        cuadrado = new Rectangle2D.Float((int) dameElInicioDeLaFigura().getX(),
                (int) dameElInicioDeLaFigura().getY(),
                dameElAnchoDelCuadrado(),
                dameElAnchoDelCuadrado());
        dibujarCuadrado2D = (Graphics2D) dibujarCuadrado;
        bordeDelCuadrado = new BasicStroke(dameElGrosorDelBordeDeLaFigura(),
                BasicStroke.CAP_ROUND, BasicStroke.JOIN_ROUND);
        dibujarCuadrado2D.setColor(dameElColorDelBorde());
        dibujarCuadrado2D.setStroke(bordeDelCuadrado);
        dibujarCuadrado2D.draw(cuadrado);
    }

    @Override
    public boolean estaDentroDelAreaDeDibujo(int coordenadaX, int coordenadaY) {
        boolean estaDentro = false;
        boolean x1 = coordenadaX > dameElInicioDeLaFigura().getX();
        boolean x2 = coordenadaX < (dameElInicioDeLaFigura().getX() + dameElAnchoDelCuadrado());
        boolean y1 = coordenadaY > dameElInicioDeLaFigura().getY();
        boolean y2 = coordenadaY < (dameElInicioDeLaFigura().getY() + dameElAnchoDelCuadrado());
        if (x1 && x2 && y1 && y2) {
            estaDentro = true;
        }
        return estaDentro;
    }

    @Override
    public void fijarPosicionDeLaFigura(int coordenadaX, int coordenadaY) {
        fijarElInicioDeLaFigura(coordenadaX, coordenadaY);
    }

    // Funciones Lógicas de la Figura:
    public final int dameElAnchoDelCuadrado() {
        return anchoDelCuadrado;
    }

    public final void fijarElAnchoDelCuadrado(int anchoDelCuadrado) {
        this.anchoDelCuadrado = anchoDelCuadrado;
    }
}
